package work.mediway.mdm.biz.service.common;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

import cn.hutool.poi.excel.ExcelReader;
import work.mediway.mdm.biz.bo.DictPushBO;
import work.mediway.mdm.core.page.QueryRequest;
import work.mediway.mdm.biz.dto.dict.DictDTO;
import work.mediway.mdm.biz.dto.dict.DictFieldDTO;
import work.mediway.mdm.biz.vo.dict.DictFormatTemplateVO;
import work.mediway.mdm.biz.vo.dict.DictStatisticsVO;
import work.mediway.mdm.core.enums.DataFormatEnum;
import work.mediway.mdm.core.enums.StatusEditEnum;
import work.mediway.mdm.core.transport.ErrorMsgVO;
import work.mediway.mdm.biz.dto.dict.DictDetailDTO;
import work.mediway.mdm.biz.dto.dict.DictGeneralDTO;
import work.mediway.mdm.biz.dto.dict.DictGeneralDeleteDTO;
import work.mediway.mdm.biz.dto.dict.DictStatisticsDTO;

/**
 * @author zhongyj <1126834403@qq.com><br/>
 * @date 2021/1/8
 */
public interface CommonDictService {
    /**
     * 查询字典数据
     *
     * @param dictDTO DictDTO
     * @param tree    boolean
     * @return List<DictVO>
     */
    Object listDictCodeAndDesc(DictDTO dictDTO, boolean tree);

    /**
     * 获取字典增量信息
     *
     * @param statisticsDTO DictStatisticsDTO
     * @return DictStatisticsVO
     */
    DictStatisticsVO dictChange(DictStatisticsDTO statisticsDTO);

    /**
     * 查询字典详情信息
     *
     * @param dictDTO      DictFieldDTO
     * @param queryRequest QueryRequest
     * @param export       是否导出
     * @param all          是否查询全部，不加权限
     * @return List<DictDetailVO>
     */
    Page<Map<String, Object>> dictDetailShowOrExport(DictFieldDTO dictDTO, QueryRequest queryRequest, boolean export, boolean all);

    /**
     * 查询字典详情信息
     * 所有信息，不关联字典和字段权限
     *
     * @param dictDTO DictFieldDTO
     * @return List<DictDetailVO>
     */
    Page<Map<String, Object>> dictDetailShowOrExportAll(DictFieldDTO dictDTO);

    /**
     * 导入字典数据
     *
     * @param inputStream InputStream
     * @param tableCode   String
     */
    void uploadDictDetail(InputStream inputStream, String tableCode);

    /**
     * 保存字典数据
     *
     * @param dictDetail DictDetailDTO
     * @param opsType    StatusEditEnum
     * @return Exceptions
     */
    ErrorMsgVO saveDictDetail(List<DictDetailDTO> dictDetail, StatusEditEnum opsType);

    /**
     * 保存字典数据
     *
     * @param dictDetail DictGeneralDTO
     * @param xmlData    xml数据
     * @return Exceptions
     */
    ErrorMsgVO saveDictDetail(DictGeneralDTO dictDetail, String xmlData);

    /**
     * 根据主键删除字典数据
     *
     * @param dictGeneralDeleteDTO DictGeneralDeleteDTO
     * @return ErrorMsgVO
     */
    ErrorMsgVO removeDict(DictGeneralDeleteDTO dictGeneralDeleteDTO);

    /**
     * 通用字典数据导入
     *
     * @param excelReader ExcelReader
     * @return Exceptions
     */
    ErrorMsgVO importDict(ExcelReader excelReader);


    /**
     * 字典数据推送
     *
     * @param dictPushBO DictPushBO
     */
    void pushDict(DictPushBO dictPushBO);

    /**
     * 字典数据存储请求
     *
     * @param table  String
     * @param format DataFormatEnum
     * @return DictFormatTemplateVO
     */
    DictFormatTemplateVO buildDictTemplate(String table, DataFormatEnum format);

}

